package iks.sound 
{
	import flash.media.*;
	import flash.utils.*;
	import iks.iface.*;
	
	/**
	 * 声音组, 放入多个 KSound 对象, 但是同时只能播放一个
	 * @author StefanieKaka
	 */
	public final class KSingleSound implements IKDispose
	{
		/**
		 * 构造函数
		 */
		public function KSingleSound() 
		{
			
		}
		
///////////////////////////////////////////////////////////////////////////////////////////////////
// 公有域
///////////////////////////////////////////////////////////////////////////////////////////////////
		
		/**
		 * 添加 KSound 对象
		 * @param	id ID 标识符
		 * @param	kSound 添加 KSound 对象
		 */
		public function addSound(id : String, kSound : KSound) : void
		{
			m_dict[id] = kSound;
		}
		
		/**
		 * 移除 KSound 对象
		 * @param	id 对象匹配的 ID
		 */
		public function removeSound(id : String) : void
		{
			m_dict[id].dispose();
			delete m_dict[id];
		}
		
		/**
		 * 播放声音
		 * @param	id 播放声音对应的 ID 标识符
		 */
		public function play(id : String, startTime : Number = 0, loops : int = 0, sndTransform : SoundTransform = null) : void
		{
			for each (var kSound : KSound in m_dict)
				kSound.stop();
			
			m_id = id;
			m_dict[id].play(startTime, loops, sndTransform);
		}
		
		/**
		 * 停止
		 */
		public function stop() : void
		{
			for each (var kSound : KSound in m_dict)
				kSound.stop();
		}
		
		/**
		 * 暂停
		 */
		public function pause() : void
		{
			m_dict[m_id].pause();
		}
		
		/**
		 * 继续
		 */
		public function resume() : void
		{
			m_dict[m_id].resume();
		}
		
		/**
		 * 设置当前播放声音音量
		 * @param	volumn 音量
		 //* @param	panning 左右声道偏移量
		 */
		public function setVolume(volumn : Number = 1, panning : Number = 0) : void
		{
			m_dict[m_id].setVolume(volumn, panning);
		}
		
///////////////////////////////////////////////////////////////////////////////////////////////////
// 实现 IKDispose 接口
///////////////////////////////////////////////////////////////////////////////////////////////////

		public function dispose() : void
		{
			if (m_isDisposed)
				return;
			m_isDisposed = true;
			
			for each (var kSound : KSound in m_dict)
				kSound.dispose();
			m_dict = null;	
		}

///////////////////////////////////////////////////////////////////////////////////////////////////
// 私有域
///////////////////////////////////////////////////////////////////////////////////////////////////
		
		private var m_isDisposed	: Boolean = false;
		private var m_id			: String = null;
		private var m_dict			: Dictionary = new Dictionary();

	}

}

































///////////////////////////////////////////////////////////////////////////////////////////////////
// end file